Skip to content

feat(workshopper): resolve generation timeouts and improve timetable#16

Merged
yinggez merged 1 commit into
mainfrom
workshopper/LGHapi_performance
Jul 17, 2026
Merged

feat(workshopper): resolve generation timeouts and improve timetable#16
yinggez merged 1 commit into
mainfrom
workshopper/LGHapi_performance

Conversation

@yinggez

@yinggez yinggez commented Jul 16, 2026

Copy link
Copy Markdown
Contributor
  • Backend Concurrency: Refactored WorkshopService.java to use a dedicated class-level ExecutorService for blocking LLM network calls, preventing ForkJoinPool thread starvation and deadlocks during concurrent session block generation.
  • Draft Persistence: Fixed a race condition in App.tsx where pending LLM block generation promises were not properly resolved when saving a draft, causing the UI to become permanently stuck in a loading state.
  • LGH Integration: Removed the strict ?status=APPROVED filter from the Learning Goal Hub fetch to allow importing all available goals, and added graceful error boundary toasts for when the LGH service is offline.
  • Timetable UI: Enhanced the SortableBlockRow to allow activity text editing even when not in full edit mode. Added a helpful info tooltip to the activity prompt.

…editing

- **Backend Concurrency:** Refactored `WorkshopService.java` to use a dedicated class-level `ExecutorService` for blocking LLM network calls, preventing `ForkJoinPool` thread starvation and deadlocks during concurrent session block generation.
- **Draft Persistence:** Fixed a race condition in `App.tsx` where pending LLM block generation promises were not properly resolved when saving a draft, causing the UI to become permanently stuck in a loading state.
- **LGH Integration:** Removed the strict `?status=APPROVED` filter from the Learning Goal Hub fetch to allow importing all available goals, and added graceful error boundary toasts for when the LGH service is offline.
- **Timetable UI:** Enhanced the `SortableBlockRow` to allow activity text editing even when not in full edit mode. Added a helpful info tooltip to the activity prompt.
@yinggez
yinggez requested review from florivn and zhngharry July 16, 2026 20:41

@florivn florivn left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Review by gpt-5.6 Luna:

PR #16 improves Workshopper’s reliability and timetable UX:

  • Uses bounded concurrent LLM calls to reduce generation timeouts.
  • Improves draft persistence and proxy timeouts.
  • Adds more flexible Learning Goal Hub imports.
  • Adds explicit timetable edit mode and concurrent slide generation.

What’s good: the concurrency limit, per-block generation, and clearer edit/save workflow are solid improvements.

Changes needed before approval:

  • Preserve result.id if the initial draft save fails; otherwise the generated session ID is lost and finalization becomes impossible.
  • Isolate pending draft-save resolvers; overlapping saves can resolve with the wrong ID or before the latest draft is persisted.
  • Add regression tests for both draft-save failure and overlapping saves.

@yinggez
yinggez merged commit c4e44d2 into main Jul 17, 2026
10 checks passed
@yinggez
yinggez deleted the workshopper/LGHapi_performance branch July 17, 2026 18:11
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants